// #include "log.h"
// // #include "main.h"
// #include <unistd.h>

// bool mutex_usr = true;
// bool mutex_sys = true;

// char log_sys_cotent[1024];
// char log_sys_type[32];

// int usr_count = 0;
// // int main()
// // {
// //     // 创建两个线程
// //     HANDLE hThread1 = CreateThread(NULL, 0, Thread_Usr, NULL, 0, NULL);
// //     HANDLE hThread2 = CreateThread(NULL, 0, Thread_Usr, NULL, 0, NULL);

// //     // 等待两个线程结束
// //     WaitForSingleObject(hThread1, INFINITE);
// //     WaitForSingleObject(hThread2, INFINITE);

// //     // 关闭句柄
// //     CloseHandle(hThread1);
// //     CloseHandle(hThread2);

// //     return 0;
// // }

// char *getDate(void)
// {
//     time_t rawtime = time(NULL);
//     struct tm *Cur_time = localtime(&rawtime);
//     static char Date[12];
//     // char *Date = (char *)malloc(20 * sizeof(char));
//     strftime(Date, sizeof(Date), "%F", Cur_time);
//     return Date;

// }

// char *getTime(void)
// {
//     time_t rawtime = time(NULL);
//     struct tm *Cur_time = localtime(&rawtime);
//     static char Time[12];
//     strftime(Time, sizeof(Time), "%T", Cur_time);
//     return Time;
// }

// // 查看文件大小
// int get_file_size(FILE *stream)
// {
//     int file_size = -1;
//     int cur_offset = ftell(stream); // 获取当前偏移位置

//     fseek(stream, 0, SEEK_END);
//     file_size = ftell(stream);
//     fseek(stream, cur_offset, SEEK_SET);
//     return file_size;
// }

// // 输出文件大小
// void print_file_size(char *file_name)
// {
//     FILE *fp = fopen(file_name, "a");
//     float file_size;
//     if (get_file_size(fp) > 1024 * 1024)
//     {
//         file_size = get_file_size(fp) / 1024 * 1024;
//         printf("%.2f MB", (double)file_size);
//     }
//     else if (get_file_size(fp) > 1024)
//     {
//         file_size = get_file_size(fp) / 1024;
//         printf("%.2f kB", (double)file_size);
//     }
//     else
//     {
//         file_size = (float)get_file_size(fp);
//         printf("%.2f B \n", (double)file_size);
//     }
// }

// // 清空文件内容
// void clean_file(char *filename)
// {
//     FILE *fclean = fopen(filename, "w");
//     // fprintf(fclean, "");
//     fclose(fclean);
// }

// // 删除最早文件
// char *rm_earliest_file(char *file_dir)
// {
//     DIR *dir;
//     struct dirent *dirent;
//     struct stat fileStat;
//     long long min = 9999999999;
//     char *earliestFilename = malloc(200);
//     char file_path[512];
//     dir = opendir(file_dir);
//     if (dir != NULL)
//     {
//         dirent = readdir(dir);
//         while (dirent != NULL)
//         {
//             if (dirent->d_name[0] != '.')
//             {
//                 sprintf(file_path, "%s/%s", file_dir, dirent->d_name);
//                 stat(file_path, &fileStat);
//                 // printf("文件名:%s 创建时间:%lld \n", dirent->d_name, fileStat.st_ctime);
//                 if (fileStat.st_ctime < min)
//                 {
//                     min = fileStat.st_ctime;
//                     strcpy(earliestFilename, dirent->d_name);
//                 }
//             }
//             dirent = readdir(dir);
//         }
//         // printf("最早文件名：%s min: %lld \n", earliestFilename, min);
//         sprintf(file_path, "%s/%s", file_dir, earliestFilename);
//         if (remove(file_path) != 0)
//         {
//             printf("remove failed: %s\n", strerror(errno));
//         }
//         // printf("%s", file_path);
//     }
//     closedir(dir);
//     return earliestFilename;
// }

// int get_dir_size(char *file_dir)
// {
//     DIR *dir;
//     struct dirent *dirent;
//     struct stat fileStat;
//     int total_size = 0;
//     char file_path[100];
//     // if (dir = opendir(file_dir))
//     dir = opendir(file_dir);
//     if (dir != NULL)
//     {
//         // while (dirent = readdir(dir))
//         dirent = readdir(dir);
//         while (dirent != NULL)
//         {
//             if (dirent->d_name[0] != '.')
//             {
//                 snprintf(file_path, sizeof(file_path), "%s/%s", file_dir, dirent->d_name);
//                 stat(file_path, &fileStat);
//                 total_size += fileStat.st_size;
//             }
//             dirent = readdir(dir);
//         }
//     }
//     closedir(dir);
//     return total_size;
// }

// // type：Device, Program, Storage
// void WriteSyslog(char *log_content, char *type, char *file_name, int file_num, char *file_dir)
// {
//     while (!mutex_sys)
//     {
//         sleep(1);
//     }
//     mutex_sys = false;

//     char *suffix = ".csv";
//     char full_file_name[100], file_path[512], buffer[100],
//         file_dir_usr[200], file_dir_sys[200];
//     sprintf(full_file_name, "%s(%d)%s", file_name, file_num, suffix);
//     sprintf(file_dir_usr, "%s/%s", file_dir, "usr");
//     sprintf(file_dir_sys, "%s/%s", file_dir, "sys");
//     sprintf(file_path, "%s/%s", file_dir_sys, full_file_name);

//     snprintf(buffer, sizeof(buffer), "%s , %s , %s", getTime(), type, log_content);
//     while (get_dir_size(file_dir_sys) + sizeof(buffer) > 32 * 1024 * 1024 - 256 * 1024) // 日志文件夹大小32M
//     {
//         char *earliestFilename = rm_earliest_file(file_dir_sys);
//         snprintf(log_sys_cotent, sizeof(log_sys_cotent), "%s%s",
//                  "文件夹空间不足，已删除Sys文件夹最早文件： ", earliestFilename);
//         strcpy(log_sys_type, "Storage");
//         mutex_sys = true;
//         WriteSyslog(log_sys_cotent, log_sys_type, getDate(), 0, FILE_DIR);
//         // wsl——Write System Log
//         //  HANDLE Thread_wsl = CreateThread(NULL, 0, Thread_Sys, NULL, 0, NULL);
//         //  WaitForSingleObject(Thread_wsl, INFINITE);
//         //  CloseHandle(Thread_wsl);
//         free(earliestFilename);
//     }

//     FILE *f = fopen(file_path, "a");
//     if (get_file_size(f) + sizeof(buffer) > 128 * 1024) // 单个日志文件大小128K
//     {
//         fclose(f);
//         file_num++;
//         mutex_sys = true;
//         WriteSyslog(log_content, type, file_name, file_num, file_dir);
//     }
//     else
//     {
//         fprintf(f, "%s , %s , %s \n", getTime(), type, log_content);
//         mutex_sys = true;
//     }
// }

// void WriteUsrlog(log_usr log, char *file_name, int file_num, char *file_dir)
// {
//     while (!mutex_usr)
//     {
//         sleep(1);
//     }
//     mutex_usr = false;
//     // printf("进入 WriteUsrLog!\n");//test
//     usr_count++;
//     log.log_row.id = usr_count;
//     char *suffix = ".csv";
//     char full_file_name[100], file_path[512], buffer[100],
//         file_dir_usr[200], file_dir_sys[200];
//     sprintf(full_file_name, "%s %s(%d)%s", getDate(), file_name, file_num, suffix);
//     sprintf(file_dir_usr, "%s/%s", file_dir, "usr");
//     sprintf(file_dir_sys, "%s/%s", file_dir, "sys");
//     sprintf(file_path, "%s/%s", file_dir_usr, full_file_name);
//     snprintf(buffer, sizeof(buffer), "%d,%s,%.2f,%d%%,%d,%d,%d \n", // 一条log大小
//              log.log_row.id, log.log_row.Time, log.log_row.Vacuum, log.log_row.Power,
//              log.log_row.Duration, log.log_row.Wait, log.log_row.StepId);

//     // printf("测试数据接收：%d,%s,%.2f,%.1fA,%.1fA,%d,%d \n", // 一条log大小
//     //          log.log_row.id, log.log_row.Time, log.log_row.Vacuum, log.log_row.Cur_set,
//     //          log.log_row.Cur_real, log.log_row.Duration, log.log_row.StepId);

//     while (get_dir_size(file_dir_usr) + sizeof(buffer) > 32 * 1024 * 1024 - 256 * 1024) // 日志文件夹大小32M
//     {
//         char *earliestFilename = rm_earliest_file(file_dir_usr);
//         snprintf(log_sys_cotent, sizeof(log_sys_cotent), "%s%s",
//                  "文件夹空间不足,已删除Usr文件夹最早文件:", earliestFilename);
//         strcpy(log_sys_type, "Storage");
//         WriteSyslog(log_sys_cotent, log_sys_type, getDate(), 0, FILE_DIR);
//         // HANDLE Thread_wsl = CreateThread(NULL, 0, Thread_Sys, NULL, 0, NULL);
//         // WaitForSingleObject(Thread_wsl, INFINITE);
//         // CloseHandle(Thread_wsl);
//         free(earliestFilename);
//     }
//     // printf("while结束\n");
//     FILE *f = fopen(file_path, "a");
//     // printf("文件打开成功\n");
//     if (get_file_size(f) + sizeof(buffer) > 128 * 1024) // 单个日志文件大小128K 128*
//     {
//         fclose(f);
//         file_num++;
//         mutex_usr = true;
//         WriteUsrlog(log, file_name, file_num, file_dir);
//         // wnul——Write New File
//         //  HANDLE Thread_wnf = CreateThread(NULL, 0, Thread_Usr, NULL, 0, NULL);
//         //  WaitForSingleObject(Thread_wnf, INFINITE);
//         //  CloseHandle(Thread_wnf);
//     }
//     else
//     {
//         if (get_file_size(f) == 0)
//         {
//             usr_count = 1;
//             fprintf(f, "%s , %s , %s \n", log.ProductName, log.Date, log.ProgramName);
//             fprintf(f, "ID,时间,真空计,功率,持续时间(s),等待时间(s),步骤ID\n");
//         }
//         fprintf(f, "%d,%s,%E,%d%%,%d,%d,%d \n",
//                 log.log_row.id, log.log_row.Time, log.log_row.Vacuum, log.log_row.Power,
//                 log.log_row.Duration, log.log_row.Wait, log.log_row.StepId);
//         fclose(f);
//         mutex_usr = true;
//     }
// }

// void *Thread_Usr(void *arg)
// {
//     // printf("进入线程体\n");
//     // struct _log_usr log;
//     // // CopyLog(&log, &device.log_usr);
//     // strncpy(log.ProductName, device.log_usr.ProductName, 32);
//     // strncpy(log.ProgramName, device.log_usr.ProgramName, 32);
//     // strncpy(log.Date, getDate(), 11);
//     // strncpy(log.log_row.Time, getTime(), 11);

//     // // log.log_row.id = device.log_usr.log_row.id;
//     // // printf("得到id:%s\n", log.log_row.id);
//     // // log.log_row.Power_set = device.log_usr.log_row.Power_set;
//     // log.log_row.Power = device.log_usr.log_row.Power;
//     // log.log_row.StepId = device.log_usr.log_row.StepId;
//     // log.log_row.Vacuum = device.log_usr.log_row.Vacuum;
//     // log.log_row.Duration = device.log_usr.log_row.Duration;
//     // log.log_row.Wait = device.log_usr.log_row.Wait;

//     // WriteUsrlog(log, log.ProductName, 0, FILE_DIR);
//     // pthread_exit(NULL);
// }

// void *Thread_Sys(void *arg)
// {
//     WriteSyslog(log_sys_cotent, log_sys_type, getDate(), 0, FILE_DIR);
//     pthread_exit(NULL);
// }

// void log_init(void)
// {
// }